home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / InputEvent.mod < prev    next >
Text File  |  1994-03-05  |  11KB  |  261 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: InputEvent.mod 40.15 (28.12.93) Oberon 3.0
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE InputEvent; (* $Implementation- *)
  12.  
  13. IMPORT
  14.   e * := Exec,
  15.   t * := Timer,
  16.   u * := Utility,
  17.   g * := Graphics;
  18.  
  19. TYPE
  20.   IEDummyPtr         * = UNTRACED POINTER TO IEDummy;
  21.   PointerPixelPtr    * = UNTRACED POINTER TO PointerPixel;
  22.   NewTabletPtr       * = UNTRACED POINTER TO NewTablet;
  23.   PointerTabletPtr   * = UNTRACED POINTER TO PointerTablet;
  24.   InputEventDummyPtr * = UNTRACED POINTER TO InputEventDummy;
  25.   InputEventPtr      * = UNTRACED POINTER TO InputEvent;
  26.   InputEventAdrPtr   * = UNTRACED POINTER TO InputEventAdr;
  27.   InputEventPrevPtr  * = UNTRACED POINTER TO InputEventPrev;
  28.  
  29. CONST
  30. (*----- constants --------------------------------------------------*)
  31.  
  32. (*  --- InputEvent.class --- *)
  33.   null           * = 00H; (* A NOP input event                              *)
  34.   rawkey         * = 01H; (* A raw keycode from the keyboard device         *)
  35.   rawmouse       * = 02H; (* The raw mouse report from the game port        *
  36.                            * device                                         *)
  37.   event          * = 03H; (* A private console event                        *)
  38.   pointerpos     * = 04H; (* A Pointer Position report                      *)
  39.   timer          * = 06H; (* A timer event                                  *)
  40.   gadgetdown     * = 07H; (* select button pressed down over a Gadget       *
  41.                            * (address in ie_EventAddress)                   *)
  42.   gadgetup       * = 08H; (* select button released over the same Gadget    *
  43.                            * (address in ie_EventAddress)                   *)
  44.   requester      * = 09H; (* some Requester activity has taken place.  See  *
  45.                            * Codes REQCLEAR and REQSET                      *)
  46.   menulist       * = 0AH; (* this is a Menu Number transmission (Menu       *
  47.                            * number is in ie_Code)                          *)
  48.   closewindow    * = 0BH; (* User has selected the active Window's Close    *
  49.                            * Gadget                                         *)
  50.   sizewindow     * = 0CH; (* this Window has a new size                     *)
  51.   refreshwindow  * = 0DH; (* the Window pointed to by ie_EventAddress needs *
  52.                            * to be refreshed                                *)
  53.   newprefs       * = 0EH; (* new preferences are available                  *)
  54.   diskremoved    * = 0FH; (* the disk has been removed                      *)
  55.   diskinserted   * = 10H; (* the disk has been inserted                     *)
  56.   activewindow   * = 11H; (* the window is about to be been made active     *)
  57.   inactivewindow * = 12H; (* the window is about to be made inactive        *)
  58.   newpointerpos  * = 13H; (* extended-function pointer position report      *
  59.                            * (V36)                                          *)
  60.   menuhelp       * = 14H; (* Help key report during Menu session (V36)      *)
  61.   changewindow   * = 15H; (* the Window has been modified with move, size,  *
  62.                            * zoom, or change (V36)                          *)
  63.  
  64.   classMax       * = 15H; (* the last class                                 *)
  65.  
  66.  
  67. (*  --- InputEvent.subClass --- *)
  68. (*  newpointerpos *)
  69.   compatible   * = 00H;  (* like pointerpos *)
  70.   pixel        * = 01H;  (* InputEvent.eventAddress points to PointerPixel *)
  71.   tablet       * = 02H;  (* InputEvent.eventAddress points to PointerTablet *)
  72.   newTablet    * = 03H;  (* InputEvent.eventAddress points to NewTablet *)
  73.  
  74. TYPE
  75.   IEDummy * = STRUCT END; (* dummy for InputEvent.eventAddress *)
  76.  
  77. (* pointed to by InputEvent.eventAddress for newpointerposs,
  78.  * and InputEvent.subClass=pixel.
  79.  *
  80.  * You specify a screen and pixel coordinates in that screen
  81.  * at which you'd like the mouse to be positioned.
  82.  * Intuition will try to oblige, but there will be restrictions
  83.  * to positioning the pointer over offscreen pixels.
  84.  *
  85.  * IEQUALIFIER_RELATIVEMOUSE is supported for IESUBCLASS_PIXEL.
  86.  *)
  87.   PointerPixel * = STRUCT (dummy: IEDummy)
  88.     screen * : e.APTR;                  (* pointer to an open screen *)
  89.     position * : g.Point;               (* pixel coordinates in iepp_Screen *)
  90.   END;
  91.  
  92. (* pointed to by InputEvent.eventAddress for newpointerpos,
  93.  * and InputEvent.subClass=tablet.
  94.  *
  95.  * You specify a range of values and a value within the range
  96.  * independently for each of X and Y (the minimum value of
  97.  * the ranges is always normalized to 0).
  98.  *
  99.  * Intuition will position the mouse proportionally within its
  100.  * natural mouse position rectangle limits.
  101.  *
  102.  * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_TABLET.
  103.  *)
  104.   PointerTablet * = STRUCT (dummy: IEDummy)
  105.     range * : g.Point;     (* 0 is min, these are max   *)
  106.     value * : g.Point;     (* between 0 and range       *)
  107.     pressure * : INTEGER;  (* -128 to 127 (unused, set to 0)  *)
  108.   END;
  109.  
  110.  
  111. (* The ie_EventAddress of an IECLASS_NEWPOINTERPOS event of subclass
  112.  * IESUBCLASS_NEWTABLET points at an IENewTablet structure.
  113.  *
  114.  *
  115.  * IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_NEWTABLET.
  116.  *)
  117.  
  118.   NewTablet * = STRUCT (dummy: IEDummy)
  119.  
  120.     (* Pointer to a hook you wish to be called back through, in
  121.      * order to handle scaling.  You will be provided with the
  122.      * width and height you are expected to scale your tablet
  123.      * to, perhaps based on some user preferences.
  124.      * If NULL, the tablet's specified range will be mapped directly
  125.      * to that width and height for you, and you will not be
  126.      * called back.
  127.      *)
  128.     callBack        * : u.HookPtr;
  129.  
  130.     (* Post-scaling coordinates and fractional coordinates.
  131.      * DO NOT FILL THESE IN AT THE TIME THE EVENT IS WRITTEN!
  132.      * Your driver will be called back and provided information
  133.      * about the width and height of the area to scale the
  134.      * tablet into.  It should scale the tablet coordinates
  135.      * (perhaps based on some preferences controlling aspect
  136.      * ratio, etc.) and place the scaled result into these
  137.      * fields.        The ient_ScaledX and ient_ScaledY fields are
  138.      * in screen-pixel resolution, but the origin ( [0,0]-point )
  139.      * is not defined.        The ient_ScaledXFraction and
  140.      * ient_ScaledYFraction fields represent sub-pixel position
  141.      * information, and should be scaled to fill a UWORD fraction.
  142.      *)
  143.     scaledX         * : INTEGER;
  144.     scaledY         * : INTEGER;
  145.     scaledXFraction * : INTEGER;
  146.     scaledYFraction * : INTEGER;
  147.  
  148.     (* Current tablet coordinates along each axis: *)
  149.     tabletX         * : LONGINT;
  150.     tabletY         * : LONGINT;
  151.  
  152.     (* Tablet range along each axis.  For example, if ient_TabletX
  153.      * can take values 0-999, ient_RangeX should be 1000.
  154.      *)
  155.     rangeX          * : LONGINT;
  156.     rangeY          * : LONGINT;
  157.  
  158.     (* Pointer to tag-list of additional tablet attributes.
  159.      * See <intuition/intuition.h> for the tag values.
  160.      *)
  161.     tagList         * : u.TagListPtr;
  162.   END;
  163.  
  164. CONST
  165.  
  166. (*  --- InputEvent.ie_Code --- *)
  167. (*  IECLASS_RAWKEY *)
  168.   upPrefix             * = 080H;
  169.   keyCodeFirst         * = 000H;
  170.   keyCodeLast          * = 077H;
  171.   commCodeFirst        * = 078H;
  172.   commCodeLast         * = 07FH;
  173.  
  174. (*  IECLASS_ANSI *)
  175.   c0First              * = 000H;
  176.   c0Last               * = 01FH;
  177.   asciiFirst           * = 020H;
  178.   asciiLast            * = 07EH;
  179.   asciiDel             * = 07FH;
  180.   c1First              * = 080H;
  181.   c1Last               * = 09FH;
  182.   latin1First          * = 0A0H;
  183.   latin1Last           * = 0FFH;
  184.  
  185. (*  IECLASS_RAWMOUSE *)
  186.   lButton              * = 068H;  (* also uses IECODE_UP_PREFIX *)
  187.   rButton              * = 069H;
  188.   mButton              * = 06AH;
  189.   noButton             * = 0FFH;
  190.  
  191. (*  IECLASS_EVENT (V36) *)
  192.   newActive            * = 001H;  (* new active input window *)
  193.   newSize              * = 002H;  (* resize of window *)
  194.   refresh              * = 003H;  (* refresh of window *)
  195.  
  196. (*  IECLASS_REQUESTER *)
  197. (*      broadcast when the first Requester (not subsequent ones) opens up in *)
  198. (*      the Window *)
  199.   reqSet               * = 001H;
  200. (*      broadcast when the last Requester clears out of the Window *)
  201.   reqClear             * = 000H;
  202.  
  203.  
  204. (*  --- InputEvent.qualifier --- *)
  205.  
  206.   lShift         * = 0;
  207.   rShift         * = 1;
  208.   capsLock       * = 2;
  209.   control        * = 3;
  210.   lAlt           * = 4;
  211.   rAlt           * = 5;
  212.   lCommand       * = 6;
  213.   rCommand       * = 7;
  214.   numericPad     * = 8;
  215.   repeat         * = 9;
  216.   interrupt      * = 10;
  217.   multiBroadCast * = 11;
  218.   midButton      * = 12;
  219.   rightButton    * = 13;
  220.   leftButton     * = 14;
  221.   relativeMouse  * = 15;
  222.  
  223. TYPE
  224.  
  225. (*----- InputEvent -------------------------------------------------*)
  226.  
  227.   InputEventDummy * = STRUCT END;
  228.   InputEvent * = STRUCT (dummy: InputEventDummy)
  229.     nextEvent     * : InputEventDummyPtr; (* the chronologically next event *)
  230.     class         * : SHORTINT;      (* the input event class *)
  231.     subClass      * : SHORTINT;      (* optional subclass of the class *)
  232.     code          * : INTEGER;       (* the input event code *)
  233.     qualifier     * : SET;           (* qualifiers in effect for the event*)
  234.     x             * : INTEGER;       (* the pointer position for the event*)
  235.     y             * : INTEGER;
  236.     timeStamp     * : t.TimeVal;     (* the system tick at the event *)
  237.   END;
  238.   InputEventAdr * = STRUCT (dummy: InputEventDummy)
  239.     nextEvent     * : InputEventDummyPtr;(* the chronologically next event *)
  240.     class         * : SHORTINT;        (* the input event class *)
  241.     subClass      * : SHORTINT;        (* optional subclass of the class *)
  242.     code          * : INTEGER;         (* the input event code *)
  243.     qualifier     * : SET;             (* qualifiers in effect for the event*)
  244.     addr          * : IEDummyPtr;      (* the event address *)
  245.     timeStamp     * : t.TimeVal;       (* the system tick at the event *)
  246.   END;
  247.   InputEventPrev * = STRUCT (dummy: InputEventDummy)
  248.     nextEvent     * : InputEventDummyPtr;(* the chronologically next event *)
  249.     class         * : SHORTINT;         (* the input event class *)
  250.     subClass      * : SHORTINT;         (* optional subclass of the class *)
  251.     code          * : INTEGER;          (* the input event code *)
  252.     qualifier     * : SET;              (* qualifiers in effect for the event*)
  253.     prev1DownCode * : SHORTINT;         (* previous down keys for dead *)
  254.     prev1DownQual * : SHORTSET;         (*   key translation: the ie_Code *)
  255.     prev2DownCode * : SHORTINT;         (*   & low byte of ie_Qualifier for *)
  256.     prev2DownQual * : SHORTSET;         (*   last & second last down keys *)
  257.     timeStamp     * : t.TimeVal;        (* the system tick at the event *)
  258.   END;
  259.  
  260. END InputEvent.
  261.